<!DOCTYPE html>
<html lang="en">
<head>
    
    <meta charset="utf-8">
    <title>tween.js - Documentation</title>
    
    
    <script src="scripts/prettify/prettify.js"></script>
    <script src="scripts/prettify/lang-css.js"></script>
    <link type="text/css" rel="stylesheet" href="styles/prettify.css">
    <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
    <script src="scripts/nav.js" defer></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
  <div class="navicon"></div>
</label>

<label for="nav-trigger" class="overlay"></label>

<nav >
    
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="module-$ui_utils_events-Events.html">Events</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_events-Events.html#$emit">$emit</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#$off">$off</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#$on">$on</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#$once">$once</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#off">off</a></li><li data-type='method'><a href="module-$ui_utils_events-Events.html#on">on</a></li></ul></li><li><a href="module-$ui_utils_messager.html">$ui/utils/messager</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_messager.html#bridgeHandler">bridgeHandler</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#buildBridge">buildBridge</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#off">off</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#pass">pass</a></li></ul></li><li><a href="module-$ui_utils_queue-Queue.html">Queue</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#clear">clear</a></li><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#push">push</a></li><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#run">run</a></li><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#start">start</a></li><li data-type='method'><a href="module-$ui_utils_queue-Queue.html#stop">stop</a></li></ul></li><li><a href="module-$ui_utils_socket.html">$ui/utils/socket</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_socket.html#close">close</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#connect">connect</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#getState">getState</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#reconnect">reconnect</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#send">send</a></li></ul></li></ul><h3>Modules</h3><ul><li><a href="module-$ui_utils_ajax.html">$ui/utils/ajax</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_ajax.html#.transformHandler">transformHandler</a></li></ul></li><li><a href="module-$ui_utils_axios.html">$ui/utils/axios</a></li><li><a href="module-$ui_utils_bom.html">$ui/utils/bom</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_bom.html#.exitFullScreen">exitFullScreen</a></li><li data-type='method'><a href="module-$ui_utils_bom.html#.fullScreen">fullScreen</a></li><li data-type='method'><a href="module-$ui_utils_bom.html#.isFullScreen">isFullScreen</a></li></ul></li><li><a href="module-$ui_utils_bridge.html">$ui/utils/bridge</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_bridge.html#.fire">fire</a></li><li data-type='method'><a href="module-$ui_utils_bridge.html#.on">on</a></li><li data-type='method'><a href="module-$ui_utils_bridge.html#.once">once</a></li><li data-type='method'><a href="module-$ui_utils_bridge.html#.provider">provider</a></li><li data-type='method'><a href="module-$ui_utils_bridge.html#.service">service</a></li></ul></li><li><a href="module-$ui_utils_bus.html">$ui/utils/bus</a></li><li><a href="module-$ui_utils_cookie.html">$ui/utils/cookie</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_cookie.html#.get">get</a></li><li data-type='method'><a href="module-$ui_utils_cookie.html#.has">has</a></li><li data-type='method'><a href="module-$ui_utils_cookie.html#.keys">keys</a></li><li data-type='method'><a href="module-$ui_utils_cookie.html#.remove">remove</a></li><li data-type='method'><a href="module-$ui_utils_cookie.html#.set">set</a></li></ul></li><li><a href="module-$ui_utils_crypto.html">$ui/utils/crypto</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_crypto.html#.base64Decode">base64Decode</a></li><li data-type='method'><a href="module-$ui_utils_crypto.html#.base64Encode">base64Encode</a></li><li data-type='method'><a href="module-$ui_utils_crypto.html#.decryptByDES">decryptByDES</a></li><li data-type='method'><a href="module-$ui_utils_crypto.html#.encryptByDES">encryptByDES</a></li><li data-type='method'><a href="module-$ui_utils_crypto.html#.md5">md5</a></li></ul></li><li><a href="module-$ui_utils_date.html">$ui/utils/date</a></li><li><a href="module-$ui_utils_dictionary.html">$ui/utils/dictionary</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_dictionary.html#.arrayToMap">arrayToMap</a></li><li data-type='method'><a href="module-$ui_utils_dictionary.html#.keysToMap">keysToMap</a></li><li data-type='method'><a href="module-$ui_utils_dictionary.html#.mapToArray">mapToArray</a></li><li data-type='method'><a href="module-$ui_utils_dictionary.html#.mapToKeys">mapToKeys</a></li></ul></li><li><a href="module-$ui_utils_dom.html">$ui/utils/dom</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_dom.html#.insertAfter">insertAfter</a></li><li data-type='method'><a href="module-$ui_utils_dom.html#.isHidden">isHidden</a></li><li data-type='method'><a href="module-$ui_utils_dom.html#.scrollTop">scrollTop</a></li></ul></li><li><a href="module-$ui_utils_download.html">$ui/utils/download</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_download.html#.download">download</a></li><li data-type='method'><a href="module-$ui_utils_download.html#.downloadBlob">downloadBlob</a></li><li data-type='method'><a href="module-$ui_utils_download.html#.downloadByData">downloadByData</a></li><li data-type='method'><a href="module-$ui_utils_download.html#.downloadByPost">downloadByPost</a></li><li data-type='method'><a href="module-$ui_utils_download.html#.stringToBlob">stringToBlob</a></li></ul></li><li><a href="module-$ui_utils_events.html">$ui/utils/events</a></li><li><a href="module-$ui_utils_excel.html">$ui/utils/excel</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_excel.html#.reader">reader</a></li></ul></li><li><a href="module-$ui_utils_helper.html">$ui/utils/helper</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_helper.html#.install">install</a></li></ul></li><li><a href="module-$ui_utils_log.html">$ui/utils/log</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_log.html#.create">create</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.dir">dir</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.error">error</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.info">info</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.log">log</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.tip">tip</a></li><li data-type='method'><a href="module-$ui_utils_log.html#.warn">warn</a></li></ul></li><li><a href="module-$ui_utils_lunar.html">$ui/utils/lunar</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_lunar.html#.getFestivals">getFestivals</a></li></ul></li><li><a href="module-$ui_utils_messager.html">$ui/utils/messager</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_messager.html#bridgeHandler">bridgeHandler</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#buildBridge">buildBridge</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#off">off</a></li><li data-type='method'><a href="module-$ui_utils_messager.html#pass">pass</a></li></ul></li><li><a href="module-$ui_utils_mock.html">$ui/utils/mock</a></li><li><a href="module-$ui_utils_money.html">$ui/utils/money</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_money.html#.format">format</a></li><li data-type='method'><a href="module-$ui_utils_money.html#.reverse">reverse</a></li></ul></li><li><a href="module-$ui_utils_queue.html">$ui/utils/queue</a></li><li><a href="module-$ui_utils_regex.html">$ui/utils/regex</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_regex.html#.isEmail">isEmail</a></li><li data-type='method'><a href="module-$ui_utils_regex.html#.isId">isId</a></li><li data-type='method'><a href="module-$ui_utils_regex.html#.isMobilePhone">isMobilePhone</a></li><li data-type='method'><a href="module-$ui_utils_regex.html#.isUrl">isUrl</a></li></ul></li><li><a href="module-$ui_utils_responsive.html">$ui/utils/responsive</a></li><li><a href="module-$ui_utils_skin.html">$ui/utils/skin</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_skin.html#.change">change</a></li><li data-type='method'><a href="module-$ui_utils_skin.html#.get">get</a></li><li data-type='method'><a href="module-$ui_utils_skin.html#.load">load</a></li></ul></li><li><a href="module-$ui_utils_socket.html">$ui/utils/socket</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_socket.html#close">close</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#connect">connect</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#destroy">destroy</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#getState">getState</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#reconnect">reconnect</a></li><li data-type='method'><a href="module-$ui_utils_socket.html#send">send</a></li></ul></li><li><a href="module-$ui_utils_storage.html">$ui/utils/storage</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_storage.html#.clear">clear</a></li><li data-type='method'><a href="module-$ui_utils_storage.html#.get">get</a></li><li data-type='method'><a href="module-$ui_utils_storage.html#.remove">remove</a></li><li data-type='method'><a href="module-$ui_utils_storage.html#.save">save</a></li></ul></li><li><a href="module-$ui_utils_tree.html">$ui/utils/tree</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_tree.html#.create">create</a></li><li data-type='method'><a href="module-$ui_utils_tree.html#.find">find</a></li><li data-type='method'><a href="module-$ui_utils_tree.html#.findPath">findPath</a></li></ul></li><li></li><li><a href="module-$ui_utils_tween.html">$ui/utils/tween</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInBack">easeInBack</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInBounce">easeInBounce</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInCirc">easeInCirc</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInCubic">easeInCubic</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInElastic">easeInElastic</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInExpo">easeInExpo</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutBack">easeInOutBack</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutBounce">easeInOutBounce</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutCubic">easeInOutCubic</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutQuad">easeInOutQuad</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutQuart">easeInOutQuart</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutQuint">easeInOutQuint</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInOutSine">easeInOutSine</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInQuad">easeInQuad</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInQuart">easeInQuart</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInQuint">easeInQuint</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeInSine">easeInSine</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutBack">easeOutBack</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutBounce">easeOutBounce</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutCirc">easeOutCirc</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutCubic">easeOutCubic</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutElastic">easeOutElastic</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutExpo">easeOutExpo</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutQuad">easeOutQuad</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutQuart">easeOutQuart</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutQuint">easeOutQuint</a></li><li data-type='method'><a href="module-$ui_utils_tween.html#.easeOutSine">easeOutSine</a></li></ul></li><li><a href="module-$ui_utils_url.html">$ui/utils/url</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_url.html#.appendQuery">appendQuery</a></li><li data-type='method'><a href="module-$ui_utils_url.html#.getHost">getHost</a></li><li data-type='method'><a href="module-$ui_utils_url.html#.getParams">getParams</a></li><li data-type='method'><a href="module-$ui_utils_url.html#.parse">parse</a></li><li data-type='method'><a href="module-$ui_utils_url.html#.stringify">stringify</a></li></ul></li><li><a href="module-$ui_utils_util.html">$ui/utils/util</a><ul class='methods'><li data-type='method'><a href="module-$ui_utils_util.html#.cancelAnimationFrame">cancelAnimationFrame</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.cloneDeep">cloneDeep</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.debounce">debounce</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.get">get</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.grouping">grouping</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.guid">guid</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.isEqual">isEqual</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.pager">pager</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.requestAnimationFrame">requestAnimationFrame</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.set">set</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.throttle">throttle</a></li><li data-type='method'><a href="module-$ui_utils_util.html#.uid">uid</a></li></ul></li></ul><h3>Events</h3><ul><li><a href="module-$ui_utils_socket.html#~event:close">close</a></li><li><a href="module-$ui_utils_socket.html#~event:error">error</a></li><li><a href="module-$ui_utils_socket.html#~event:message">message</a></li><li><a href="module-$ui_utils_socket.html#~event:open">open</a></li><li><a href="module-utils_queue-Queue.html#event:complete">complete</a></li><li><a href="module-utils_queue-Queue.html#event:error">error</a></li><li><a href="module-utils_queue-Queue.html#event:success">success</a></li></ul><h3>Global</h3><ul><li><a href="global.html#isFlexSupported">isFlexSupported</a></li><li><a href="global.html#isStyleSupport">isStyleSupport</a></li></ul>
</nav>

<div id="main">
    
    <h1 class="page-title">tween.js</h1>
    

    



    
    <section>
        <article>
            <pre class="prettyprint source linenums"><code>/**
 * 缓动动画函数和各类算法
 * @module $ui/utils/tween
 * @author 陈华春
 */

// 动画每秒60帧
const UPDATE_TIME = 1000 / 60

const pow = Math.pow
const sqrt = Math.sqrt
const sin = Math.sin
const cos = Math.cos
const PI = Math.PI
const c1 = 1.70158
const c2 = c1 * 1.525
const c3 = c1 + 1
const c4 = (2 * PI) / 3
const c5 = (2 * PI) / 4.5

// 动画执行函数
const rAF = window.requestAnimationFrame || function (cb) {
  setTimeout(cb, UPDATE_TIME)
}

/**
 * 缓动动画函数
 * @param {number} startValue 开始时的值
 * @param {number} endValue 结束时的值
 * @param {number} during 动画持续时间，单位：毫秒
 * @param {Function} easingFunc 缓动算法函数
 * @param {function} stepCb 每次改变的回调函数
 * @returns {Promise} Promise实例
 *
 * @example
 *
 *  import tween, {easeInCubic} from '@/utils/tween'
 *  tween(0, 100, 300, easeInCubic, function(val){
 *      console.log(val)
 *      // to do something
 *  })
 */
export default function (startValue, endValue, during, easingFunc, stepCb) {
  // 改变的值大小
  const changeValue = endValue - startValue
  // 指定时间内更新的次数
  const updateCount = during / UPDATE_TIME
  // 每次更新的值距离
  const perUpdateDistance = 1 / updateCount
  let position = 0
  return new Promise(resolve => {
    function step() {
      const state = startValue + changeValue * easingFunc(position)
      let result = stepCb(state)
      // 如果返回false，停止运行
      if (result === false) return
      position += perUpdateDistance
      if (position &lt; 1) {
        rAF(step)
      } else {
        rAF(() => {
          result = stepCb(endValue)
          if (result === false) return
          resolve()
        })
      }
    }

    step()
  })
}

/**
 * easeInQuad
 * @param {number} x
 * @returns {number}
 */
export function easeInQuad(x) {
  return x * x
}

/**
 * easeOutQuad
 * @param {number} x
 * @returns {number}
 */
export function easeOutQuad(x) {
  return 1 - (1 - x) * (1 - x)
}

/**
 * easeInOutQuad
 * @param x
 * @returns {number}
 */
export function easeInOutQuad(x) {
  return x &lt; 0.5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2
}

/**
 * easeInCubic
 * @param x
 * @returns {number}
 */
export function easeInCubic(x) {
  return x * x * x
}

/**
 * easeOutCubic
 * @param x
 * @returns {number}
 */
export function easeOutCubic(x) {
  return 1 - pow(1 - x, 3)
}

/**
 * easeInOutCubic
 * @param x
 * @returns {number}
 */
export function easeInOutCubic(x) {
  return x &lt; 0.5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2;
}

/**
 * easeInQuart
 * @param x
 * @returns {number}
 */
export function easeInQuart(x) {
  return x * x * x * x;
}

/**
 * easeInQuart
 * @param x
 * @returns {number}
 */
export function easeOutQuart(x) {
  return 1 - pow(1 - x, 4)
}

/**
 * easeInOutQuart
 * @param x
 * @returns {number}
 */
export function easeInOutQuart(x) {
  return x &lt; 0.5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2;
}

/**
 * easeInQuint
 * @param x
 * @returns {number}
 */
export function easeInQuint(x) {
  return x * x * x * x * x
}

/**
 * easeOutQuint
 * @param x
 * @returns {number}
 */
export function easeOutQuint(x) {
  return 1 - pow(1 - x, 5)
}

/**
 * easeInOutQuint
 * @param x
 * @returns {number}
 */
export function easeInOutQuint(x) {
  return x &lt; 0.5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2;
}

/**
 * easeInSine
 * @param x
 * @returns {number}
 */
export function easeInSine(x) {
  return 1 - cos(x * PI / 2)
}

/**
 * easeOutSine
 * @param x
 * @returns {number}
 */
export function easeOutSine(x) {
  return sin(x * PI / 2)
}

/**
 * easeInOutSine
 * @param x
 * @returns {number}
 */
export function easeInOutSine(x) {
  return -(cos(PI * x) - 1) / 2
}

/**
 * easeInExpo
 * @param x
 * @returns {number}
 */
export function easeInExpo(x) {
  return x === 0 ? 0 : pow(2, 10 * x - 10)
}

/**
 * easeOutExpo
 * @param x
 * @returns {number}
 */
export function easeOutExpo(x) {
  return x === 1 ? 1 : 1 - pow(2, -10 * x)
}

export function easeInOutExpo(x) {
  return x === 0 ? 0 : x === 1 ? 1 : x &lt; 0.5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2
}

/**
 * easeInCirc
 * @param x
 * @returns {number}
 */
export function easeInCirc(x) {
  return 1 - sqrt(1 - pow(x, 2))
}

/**
 * easeOutCirc
 * @param x
 * @returns {number}
 */
export function easeOutCirc(x) {
  return sqrt(1 - pow(x - 1, 2))
}

export function easeInOutCirc(x) {
  return x &lt; 0.5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2
}

/**
 * easeInElastic
 * @param x
 * @returns {number}
 */
export function easeInElastic(x) {
  return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4)
}

/**
 * easeOutElastic
 * @param x
 * @returns {number}
 */
export function easeOutElastic(x) {
  return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * c4) + 1
}

export function easeInOutElastic(x) {
  return x === 0 ? 0 : x === 1 ? 1 : x &lt; 0.5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5) / 2 + 1
}

/**
 * easeInBack
 * @param x
 * @returns {number}
 */
export function easeInBack(x) {
  return c3 * x * x * x - c1 * x * x
}

/**
 * easeOutBack
 * @param x
 * @returns {number}
 */
export function easeOutBack(x) {
  return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2)
}

/**
 * easeInOutBack
 * @param x
 * @returns {number}
 */
export function easeInOutBack(x) {
  return x &lt; 0.5 ? (pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2
}

/**
 * easeInBounce
 * @param x
 * @returns {number}
 */
export function easeInBounce(x) {
  return 1 - easeOutBounce(1 - x)
}

/**
 * easeOutBounce
 * @param x
 * @returns {number}
 */
export function easeOutBounce(x) {
  const n1 = 7.5625
  const d1 = 2.75
  if (x &lt; 1 / d1) {
    return n1 * x * x
  } else if (x &lt; 2 / d1) {
    return n1 * (x -= (1.5 / d1)) * x + 0.75;
  } else if (x &lt; 2.5 / d1) {
    return n1 * (x -= (2.25 / d1)) * x + 0.9375;
  } else {
    return n1 * (x -= (2.625 / d1)) * x + 0.984375;
  }
}

/**
 * easeInOutBounce
 * @param x
 * @returns {number}
 */
export function easeInOutBounce(x) {
  return x &lt; 0.5 ? (1 - easeOutBounce(1 - 2 * x)) / 2 : (1 + easeOutBounce(2 * x - 1)) / 2
}
</code></pre>
        </article>
    </section>





    
</div>

<br class="clear">

<footer>
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.4</a> on Wed Jun 10 2020 17:09:12 GMT+0800 (GMT+08:00) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>

<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>




<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?c4e5f73318b5cb0c389e3d9a05f831cc";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
})();
</script>

</body>
</html>
